perm filename LISP.LSP[1,3]2 blob sn#200510 filedate 1976-02-06 generic text, type T, neo UTF8
(DEFPROP %DEFIN
	 (LAMBDA (X V F P)
		 (PROG (R)
		       (SETQ R (COND ((GETL X
					    (QUOTE (EXPR FEXPR
							 SUBR
							 FSUBR
							 LSUBR
							 MACRO)))
				      (LIST X (QUOTE REDEFINED)))
				     (T X)))
		       (PUTPROP X (LIST (QUOTE LAMBDA) V F) P)
		       (RETURN R)))
	 EXPR)

(DEFPROP DE
 (LAMBDA (L) (%DEFIN (CAR L) (CADR L) (CADDR L) (QUOTE EXPR)))
 FEXPR)

(DEFPROP DF
 (LAMBDA (L) (%DEFIN (CAR L) (CADR L) (CADDR L) (QUOTE FEXPR)))
 FEXPR)

(DEFPROP DM
 (LAMBDA (L) (%DEFIN (CAR L) (CADR L) (CADDR L) (QUOTE MACRO)))
 FEXPR)

(DEFPROP PLUS (LAMBDA (L) (*EXPAND L (QUOTE *PLUS))) MACRO)

(DEFPROP DIFFERENCE (LAMBDA (L) (*EXPAND L (QUOTE *DIF))) MACRO)

(DEFPROP TIMES (LAMBDA (L) (*EXPAND L (QUOTE *TIMES))) MACRO)

(DEFPROP QUOTIENT (LAMBDA (L) (*EXPAND L (QUOTE *QUO))) MACRO)

(DEFPROP LESSP
 (LAMBDA (L)
  (LIST	(QUOTE *LESS)
	(*EXPAND1 (CDR (REVERSE (CDR L)))
		  (QUOTE (LAMBDA (X Y)
				 (COND ((AND X (*LESS X Y)) Y)))))
	(CAR (LAST L))))
 MACRO)


(DEFPROP GREATERP
 (LAMBDA (L)
  (LIST	(QUOTE *GREAT)
	(*EXPAND1 (CDR (REVERSE (CDR L)))
		  (QUOTE (LAMBDA (X Y)
				 (COND ((AND X (*GREAT X Y)) Y)))))
	(CAR (LAST L))))
 MACRO)

(DEFPROP %DEVP
	 (LAMBDA (X)
		 (OR (EQ (CAR (LAST (EXPLODE X))) (QUOTE :))
		     (AND (NOT (ATOM X)) (NOT (ATOM (CDR X))))))
	 EXPR)

(DE %READCHAN (%CHAN %TALK)
	      (PROG (%OLDCHAN %SEXPR)
		    (SETQ %OLDCHAN (INC %CHAN NIL))
	       LOOP (SETQ %SEXPR (ERRSET (READ)))
		    (COND ((EQ (CAR %SEXPR) (QUOTE COMMENT))
			   (PROG (%XCH)
				A
				(SETQ %XCH (READCH))
				(AND (EQ %XCH (QUOTE /;))
				     (RETURN))
				(GO A) )
			   (GO LOOP)) )
		    (COND ((ATOM %SEXPR) (GO END)))
		    (SETQ %SEXPR (EVAL (CAR %SEXPR)))
		    (COND (%TALK (PRINT %SEXPR)))
		    (GO LOOP)
	       END  (INC %OLDCHAN T)
		    (RETURN NIL)))

(DE %READAFILE (%DEV %FNAM %TALK)
 (%READCHAN (EVAL (LIST (QUOTE INPUT) (GENSYM) %DEV %FNAM)) %TALK))

(DE READIN (%DEV %FLIST %TALK)
    (PROG NIL
     LOOP (COND	((NULL %FLIST) (RETURN (QUOTE FINISHED-LOADING)))
		((%DEVP (CAR %FLIST)) (SETQ %DEV (CAR %FLIST))
				      (SETQ %FLIST (CDR %FLIST))
				      (GO LOOP)))
	  (%READAFILE %DEV (CAR %FLIST) %TALK)
	  (SETQ %FLIST (CDR %FLIST))
	  (GO LOOP)))

(DF DSKIN (%L) (READIN (QUOTE DSK:) %L T))

(DF SYSIN (%L) (READIN (QUOTE SYS:) %L NIL))

(DEFPROP PUTSYM
 (LAMBDA (L)
  (MAPCAR (FUNCTION (LAMBDA (X)
		     (COND ((ATOM X) (*PUTSYM X X))
			   (T (*PUTSYM (CAR X) (EVAL (CADR X)))))))
	  L))
 FEXPR)


(DEFPROP GETSYM
 (LAMBDA (L)
  (MAPCAR
   (FUNCTION (LAMBDA (X)
	      (PROG (V)
		    (SETQ V (*GETSYM X))
		    (COND (V (PUTPROP X (NUMVAL V) (CAR L)))
			  (T (PRINT (CONS X
					  (QUOTE (NOT IN
						      SYMBOL
						      TABLE))))))
		    (RETURN V))))
   (CDR L)))
 FEXPR)

(DF BREAK (%LL%)
	  (PROG (%EX% %ICH% %OCH%)
		(SETQ %ICH% (INC NIL NIL))
		(SETQ %OCH% (OUTC NIL NIL))
		(PRINT (CONS (QUOTE *BREAK*) (CAR %LL%)))
	   LOOP	(TERPRI)
		(SETQ %EX% (ERRSET (READ)))
		(COND ((ATOM %EX%) (GO LOOP)))
		(COND ((EQ (CAR %EX%) *BPROCEED*) (GO END)))
		(ERRSET (PRIN1 (EVAL (CAR %EX%))))
		(GO LOOP)
	   END	(INC %ICH% NIL)
		(OUTC %OCH% NIL)
		(RETURN (EVAL (CADR %LL%)))))

(SETQ *BPROCEED* (QUOTE P))

(PROG (EX)
      (SETQ EX (QUOTE (LAMBDA (L)
		       (PROG2 (SYSIN LAP)
			      (LIST (QUOTE QUOTE) (EVAL L))))))
      (MAPC (FUNCTION (LAMBDA (X) (PUTPROP X EX (QUOTE MACRO))))
	    (QUOTE (DEFSYM LAP OPS))))

(PROG (EX)
      (SETQ EX (QUOTE (LAMBDA (L)
		       (PROG2 (SYSIN (SOSLNK.LAP))
			      (LIST (QUOTE QUOTE) (EVAL L))))))
      (MAPC (FUNCTION (LAMBDA (X) (PUTPROP X EX (QUOTE MACRO))))
	    (QUOTE (EDFUN FILEIN))))


(PROG (EX)
      (SETQ EX (QUOTE (LAMBDA (L)
		       (PROG2 (SYSIN TRACE)
			      (LIST (QUOTE QUOTE) (EVAL L))))))
      (MAPC (FUNCTION (LAMBDA (X) (PUTPROP X EX (QUOTE MACRO))))
	    (QUOTE (TRACE UNTRACE
			  TRACET
			  UNTRACET
			  SLST
			  UNSLST
			  RESET))))

(DF COMMENT (L) NIL)

(DF DECLARE (L) NIL)

(SETQ EIGHT (ADD1 7))

(SETQ TEN (PLUS 2 EIGHT))

(DE OCTAL NIL (SETQ BASE (SETQ IBASE EIGHT)))

(DE DECIMAL NIL (SETQ BASE (SETQ IBASE TEN)))

(COND ((NULL (ERRSET (INPUT INITCHAN DSK: (LISP . INI)) NIL)))
      (T (%READCHAN (QUOTE INITCHAN) NIL)))

(PROG NIL (INC NIL T) (OUTC NIL T) (EXCISE) (CSYM G0000) (ERR))